void main() {
  // Lists 示例
  print("Lists 示例:");
  var list1 = [1, 2, 3];
  print("原始列表: $list1");
  print("列表长度: ${list1.length}");
  print("第二个元素: ${list1[1]}");
  list1[1] = 1;
  print("修改后的列表: $list1");

  var constantList = const [1, 2, 3];
  print("常量列表: $constantList");
  // constantList[1] = 1; // 取消注释此行将导致错误

  // Sets 示例
  print("\nSets 示例:");
  var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};
  print("卤族元素集合: $halogens");

  var emptySet1 = <String>{};
  print("空字符串集合: $emptySet1");
  Set<String> emptySet2 = {};
  print("空字符串集合: $emptySet2");
  // var emptySet3 = {}; // 这会创建一个 Map，而不是 Set。
  // print("空集合: $emptySet3"); //不要打印emptySet3，它会报错

  var elements = <String>{};
  elements.add('fluorine');
  elements.addAll(halogens);
  print("添加元素后的集合: $elements");
  print("集合元素个数: ${elements.length}");

  final constantSet = const {
    'fluorine',
    'chlorine',
    'bromine',
    'iodine',
    'astatine',
  };
  print("常量集合: $constantSet");
  // constantSet.add('helium'); // 取消注释此行将导致错误

  // Maps 示例
  print("\nMaps 示例:");
  var gifts = {
    // Key:    Value
    'first': 'partridge',
    'second': 'turtledoves',
    'fifth': 'golden rings',
  };
  print("礼物映射: $gifts");

  var nobleGases = {2: 'helium', 10: 'neon', 18: 'argon'};
  print("惰性气体映射: $nobleGases");

  var gifts2 = <String, String>{};
  gifts2['first'] = 'partridge';
  gifts2['second'] = 'turtledoves';
  gifts2['fifth'] = 'golden rings';
  print("礼物映射2: $gifts2");

  var nobleGases2 = <int, String>{};
  nobleGases2[2] = 'helium';
  nobleGases2[10] = 'neon';
  nobleGases2[18] = 'argon';
  print("惰性气体映射2: $nobleGases2");

  var gifts3 = {'first': 'partridge'};
  gifts3['fourth'] = 'calling birds'; // 添加键值对
  print("添加键值对后的礼物映射: $gifts3");
  print("第一个礼物: ${gifts3['first']}");
  print("第五个礼物: ${gifts3['fifth']}"); // 访问不存在的键，返回 null
  print("礼物映射长度: ${gifts3.length}");

  final constantMap = const {2: 'helium', 10: 'neon', 18: 'argon'};
  print("常量映射: $constantMap");
  // constantMap[2] = 'Helium'; // 取消注释此行将导致错误

  // Spread Operators 示例
  print("\nSpread Operators 示例:");
  var list3 = [1, 2, 3];
  var list4 = [0, ...list3];
  print("使用 spread 运算符后的列表: $list4");
  assert(list4.length == 4);

  var list5 = [0, ...list3]; // list3 可以为 null
  print("使用 null-aware spread 运算符后的列表: $list5");
  assert(list5.length == 4);

  List<int>? list6;
  var list7 = [0, ...?list6];
  print(
    "list6为null, 使用 null-aware spread 运算符后的列表: $list7, 长度: ${list7.length}",
  ); //list6 为空
  assert(list7.length == 1);

  // Control-flow Operators 示例
  print("\nControl-flow Operators 示例:");
  var promoActive = true;
  var nav = ['Home', 'Furniture', 'Plants', if (promoActive) 'Outlet'];
  print("包含 Outlet 的导航列表: $nav");

  promoActive = false;
  // 由于 promoActive 已经被设置为 false，这里直接使用基础列表
  var nav2 = ['Home', 'Furniture', 'Plants'];
  print("不包含 Outlet 的导航列表: $nav2");

  const login = 'Manager';
  var nav3 = [
    'Home',
    'Furniture',
    'Plants',
    if (login case 'Manager') 'Inventory',
  ];
  print("包含 Inventory 的导航列表: $nav3");

  var listOfInts = [1, 2, 3];
  var listOfStrings = ['#0', for (var i in listOfInts) '#$i'];
  print("转换后的字符串列表: $listOfStrings");
  assert(listOfStrings[1] == '#1');
}
